<?php
/**
 * ExperimentoEquipoForm class.
 * ExperimentoEquipoForm is the data structure for keeping
 * the form data related to adding an existing equipo to a experimento. It is used by the 'Addequipo' action of 'ExperimentoController'.
 */
class ExperimentoEquipoForm extends CFormModel
{
	/**
	 * @var string equipo being added to the experimento
	 */
	public $equipo;
        public $experimento;
	private $_equipo;
	
	/**
	 * Declares the validation rules.
	 * The rules state that username and password are required,
	 * and password needs to be authenticated using the verify() method
	 */
	public function rules()
	{
		return array(
			array('equipo', 'required'),
			array('equipo', 'verify'),
		);
	}
 
	
	/**
	 * Authenticates the existence of the equipo in the system.
	 * If valid, it will also make the association between the equipo and experimento
	 * This is the 'verify' validator as declared in rules().
	 */
	public function verify($attribute,$params)
	{
		if(!$this->hasErrors())  // we only want to authenticate when no other input errors are present
		{
			$equipo = Equipo::model()->findByAttributes(array('nombre'=>$this->equipo));
                        if($this->experimento->isEquipoInExperimento($equipo))
                        {
				$this->addError('equipo','This equipo has already been added to the project.'); 
			}
			else
			{
				$this->_equipo = $equipo;
			}
		}
	}
	
	public function assign()
	{
		if($this->_equipo instanceof Equipo)
		{
			
			//assign the user, in the specified role, to the project
			$this->experimento->assignEquipo($this->_equipo->id);  
			//add the association, along with the RBAC biz rule, to our RBAC hierarchy
                        //$auth = Yii::app()->authManager; 
			/*$bizRule='return isset($params["proyecto"]) && $params["proyecto"]->allowCurrentUser("'.$this->rol.'");';  
			$auth->assign($this->rol,$this->_user->id, $bizRule);*/
			return true;
		}
		else
		{
			$this->addError('equipo','Error when attempting to assign this equipo to the experimento.'); 
			return false;
		}
		
	}
	
	
}
